/*
2. 把二维数组看做由多个一维数组构成。
  a. 比如int a[3][3]，含有三个元素a[0]、a[1]、a[2]，这三个都是一维数组名。
3. 如何理解二维数组名？
  a. 二维数组名代表数组的起始地址，数组名+1，是移动一行元素。
  b. 二维数组名常被称为 行地址（行指针）。行指针也是数组指针。
  c. 存储行地址的指针变量，叫做行指针变量，形式如下：
    ⅰ. <数据类型> （*<指针变量名>）[表达式]；
    ⅱ. int a[2][3]; int (*p)[3];
    ⅲ. 方括号中的常量表达式表示指针加1，移动几个数据。

sizeof(a)=48
sizeof(a[0])=16
sizeof(a[1])=16
sizeof(a[2])=16
0x7ffe8189bd20
0x7ffe8189bd30
0x7ffe8189bd40

0x7ffe8189bd20
0x7ffe8189bd30
0x7ffe8189bd40

0x7ffe8189bd20
0x7ffe8189bd30
0x7ffe8189bd40


 */
#include<stdio.h>
int main(){
	int a[3][4] = {{1,2,3,4},{4,5,6,8},{2,9,3,5}};
	
	printf("sizeof(a)=%ld\n",sizeof(a));
	printf("sizeof(a[0])=%ld\n",sizeof(a[0]));
	printf("sizeof(a[1])=%ld\n",sizeof(a[1]));
	printf("sizeof(a[2])=%ld\n",sizeof(a[2]));

	printf("%p\n",a);
	printf("%p\n",a + 1);
	printf("%p\n",a + 2);
	
	printf("%p\n",a[0]);
	printf("%p\n",a[1]);
	printf("%p\n",a[2]);

	int (*p)[4] = a;
	printf("%p\n",p);
	printf("%p\n",p + 1);
	printf("%p\n",p + 2);
}
